package com.aiwiown.face.response;

import com.aiwiown.face.ApiResponse;
import com.aiwiown.face.domain.verify.AttackResult;
import com.aiwiown.face.domain.verify.Images;
import com.aiwiown.face.domain.verify.Verification;
import com.aiwiown.face.internal.mapping.ApiField;

/**
 * @ClassName : AppVerifyResponse
 * @Description :
 * @Author : dbin0123
 * @Date: 2020-03-15 18:48
 */
public class AppVerifyResponse extends ApiResponse {
    private static final long serialVersionUID = 1443708112046515792L;

    /**
     * 传入的业务流水号，原封不动地返回。
     */
    @ApiField("biz_no")
    private String bizNo;

    /**
     * 表示本次验证的结果状态码。可结合result_code和result_message字段知晓具体的结果及原因：
     * 1000系列状态码表示比对完成，验证通过，经过比对，是同一个人
     * 2000系列状态码表示比对完成，活体验证通过，但待比对照片与参考照片，或参考照片中的至少一张，不是同一个人
     * 3000系列状态码表示在比对的时候，参考数据调用情况
     * 3100系列状态码表示参考数据调用出错（不计费）
     * 4000系列状态码表示验证过程的操作结果，如果在验证过程结果，则返回对应的结果
     * 4100系列状态码表示云端活体判断未通过
     * 4200系列状态码表示SDK活体图像采集失败
     * 其他结果，请预留处理方案，对于未来可能的错误，我们可能持续增加错误码。
     * 注：9000系列的返回优先级高于其他错误码。
     */
    @ApiField("result_code")
    private String resultCode;

    /**
     * 可通过此字段信息知晓具体的原因。具体见：result_code & result_message 对照表；
     */
    @ApiField("result_message")
    private String resultMessage;

    /**
     * 当“verbose=1”，且“result状态码为1000、2000系列”时，本字段才会返回：
     * "idcard"：KYC验证的综合分数。
     * "confidence"： Float类型，取值［0，100］， 数字越大表示风险越小。
     * “thresholds”：一组用于参考的置信度阈值，Object类型，包含三个字段，均为Float类型、取值［0，100］：
     * “1e-3”：风险为千分之一的置信度阈值
     * “1e-4”：风险为万分之一的置信度阈值
     * “1e-5”：风险为十万分之一的置信度阈值
     * “1e-6”：风险为百万分之一的置信度阈值
     * ref1：活体采集人像与上传的image_ref1的比对结果（仅当get_biz_token中存在image_ref1时返回，返回结果同idcard字段）
     * ref2：活体采集人像与上传的image_ref2的比对结果（仅当get_biz_token中存在image_ref2时返回，返回结果同idcard字段）
     */
    @ApiField("verification")
    private Verification verification;

    /**
     * 当“result状态码非4200系列”时，本字段才会返回：
     * "score"：Float类型，取值［0,1]。代表攻击的分数，分数越高表明攻击的可能性越大
     * "threshold"：Float类型，取值［0,1]。代表攻击的阈值
     * "result"：Bool类型，取值True或者False。代表云端攻击判断的结果，False代表不是攻击，True代表是攻击。
     * 注：
     * 当在App-GetBizToken中设置参数“force_compare=1”时，则该API会忽略云端的活体判断，用户需要自行通过此字段来判断是否是活体。
     * 云端采用默认策略是判断score >= threshold时，代表此次可能是攻击。
     */
    @ApiField("attack_result")
    private AttackResult attackResult;

    /**
     * 一组照片列表，后续会根据采集的照片增加对应的照片字段。
     * image_best：活体照片，base64编码。
     */
    @ApiField("images")
    private Images images;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getBizNo() {
        return bizNo;
    }

    public void setBizNo(String bizNo) {
        this.bizNo = bizNo;
    }

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMessage() {
        return resultMessage;
    }

    public void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }

    public Verification getVerification() {
        return verification;
    }

    public void setVerification(Verification verification) {
        this.verification = verification;
    }

    public AttackResult getAttackResult() {
        return attackResult;
    }

    public void setAttackResult(AttackResult attackResult) {
        this.attackResult = attackResult;
    }

    public Images getImages() {
        return images;
    }

    public void setImages(Images images) {
        this.images = images;
    }
}
